<?php 
class CrmBillController extends Zone_Action{
	public function field(){
		$data = array(
			date_updated =>array(
				type			=> 'NONE',
				default_value   => new Model_Expr('NOW()')
			),
			updated_by_id =>array(
				type			=> 'NONE',
				default_value 	=> get_user_id()
			),
						
			code 	=> array(
				type 			=> 'CHAR',
				no_empty 		=> true,
				form_label		=> 'Lần thanh toán'
			),
			desc 	=> array(
				type 			=> 'CHAR',
				form_label		=> 'Mô tả'
			),
			date_fixed 		=> array(
				type 			=> 'DATE',
				form_label		=> 'Ngày dự kiến',
				fix_value		=> change_date_format,
				default_value	=> NULL
			),			
			date_paid	 	=> array(
				type 			=> 'DATE',
				form_label		=> 'Ngày thực tế',
				fix_value		=> change_date_format,
				default_value	=> NULL
			),			
			percent 	=> array(
				type 			=> 'INT',
				form_label		=> 'Phần trăm thanh toán',
				max				=> 100,
				min				=> 0
			),			
			currency_id 	=> array(
				type 			=> 'INT',
				form_label		=> 'Tiền tệ',
				default_value	=> NULL	
			),			
			value 	=> array(
				type 			=> 'INT',
				form_label		=> 'Thành tiền'
			)		
		);
		return $data;	
	}
	
	protected function getOptions(){
		$currencies = $this->Model->fetchAll("SELECT * FROM `currencies` ORDER BY `title` DESC");
		$this->set(array(
			currencies  => $currencies
		));
	
	}
	public function initAction(){
		$this->removeLayout();
	}
	
	public function addAction(){
		$user_id = get_user_id();	
		
		$contract_id = getInt('contract_id',0);
		$contract = $this->Model->fetchRow("SELECT * FROM `crm_contracts` WHERE `ID`='$contract_id' AND `is_draft`='no'");	
			
		if( !$contract ){
			return $this->setJSON(array(
				alert	=> 'Bản ghi không tồn tại hoặc đã bị xóa'	
			));
		}
		
		$customer_id = $contract['customer_id'];
		$customer = $this->Model->fetchAll("SELECT * FROM `crm_customers`
			WHERE `ID`='$customer_id' AND `is_draft`='no'");
				
		if( !$customer ){
			return $this->setJSON(array(
				alert	=> 'Bản ghi không tồn tại hoặc đã bị xóa'	
			));
		}		

		if( !$this->hasRole('crm_admin') && $customer['care_by_id'] != $user_id ){
			return $this->setJSON(array(
				alert	=> 'Bạn không có quyền thực hiện tác vụ này'	
			));			
		}
		
		if( !isPost()){
			$this->getOptions();
		}else{		
			loadClass('ZData');
			$f = new ZData();
			$f->addFields( $this->field());
	
			$data = $f->getData();
			
			if( !is_array($data)){
				return $this->setJSON(array(
					alert => $data
				));
			}		
			
			$data['date_created']  = new Model_Expr('NOW()');				
			$data['created_by_id']  = get_user_id();				
			$data['contract_id']  = $contract_id;				

			$this->Model->insert('crm_contract_bills',$data);
			
			return $this->setJSON(array(
				close		=> true,
				redirect	=> "#Crm/Contract/View?ID=$contract_id"
			));
		}
	}

	public function editAction(){
		$post_id = getInt('ID',0);
		$user_id = get_user_id();
				
		$post = $this
			->Model
			->fetchRow("SELECT * FROM `crm_contract_bills` WHERE `ID`='$post_id'");
		
		if(!$post){
			return $this->setJSON(array(
				alert => 'Bản ghi đã bị xóa hoặc không tồn tại'
			));
		}	
		
		$contract_id = $post['contract_id'];
				
		$contract = $this->Model->fetchRow("SELECT * FROM `crm_contracts` 
			WHERE `ID`='$contract_id' AND `is_draft`='no'");	
			
		if( !$contract ){
			return $this->setJSON(array(
				alert	=> 'Bản ghi không tồn tại hoặc đã bị xóa'	
			));
		}
		
		$customer_id = $contract['customer_id'];
		$customer = $this->Model->fetchAll("SELECT * FROM `crm_customers`
			WHERE `ID`='$customer_id' AND `is_draft`='no'");
		
		if( !$customer ){
			return $this->setJSON(array(
				alert	=> 'Bản ghi không tồn tại hoặc đã bị xóa'	
			));
		}		

		if( !$this->hasRole('crm_admin') && $customer['care_by_id'] != $user_id ){
			return $this->setJSON(array(
				alert	=> 'Bạn không có quyền thực hiện tác vụ này'	
			));			
		}
		
		if( !isPost() ){			
			$this->getOptions();			
			$this->set(array(
				ID	 => $post_id,
				post => $post
			));
		}else{
			loadClass('ZData');
			$f = new ZData();
			$f->addFields( $this->field());
	
			$data = $f->getData();
			
			if( !is_array($data)){
				return $this->setJSON(array(
					alert => $data
				));
			}		

			$this->Model->update('crm_contract_bills', $data, "`ID`='$post_id'");
			
			return $this->setJSON(array(
				close		=> true,
				redirect	=> "#Crm/Contract/View?ID=$contract_id"
			));
		}
	}

	public function deleteAction(){
		$ids = get('ID',array(),true);
		$user_id = get_user_id();
		
		foreach( $ids as $post_id ){
			$post = $this->Model->fetchRow("SELECT * FROM `crm_contract_bills` WHERE `ID`='$post_id'");
			if( !$post  ) continue;

			$contract_id = $post['contract_id'];
			$contract = $this->Model->fetchRow("SELECT * FROM `crm_contracts` WHERE `ID`='$contract_id' AND `is_draft`='no'");	
			
			if( !$contract ) continue;
				
			$customer_id = $contract['customer_id'];
			$customer = $this->Model->fetchAll("SELECT * FROM `crm_customers`
				WHERE `ID`='$customer_id' AND `is_draft`='no'");
						
			if( !$customer ) continue;
				
			if( !$this->hasRole('crm_admin') && $customer['care_by_id'] != $user_id  )
				continue;

			$this->Model->delete('crm_contract_bills'," `ID`='$post_id' ");
		}
		
		return $this->setJSON(array(
			redirect => "#Crm/Contract/View?ID=$contract_id"
		));
	}
}?>